package com.dys.utils;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import com.dys.multisheet.LoginUrl;
import com.dys.multisheet.LoginUser;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: 疾风
 * @ClassName: MultiSheetUtils
 * @Description: 多个工作表导入导出
 * @CreateDate: 2024/12/10
 * @Version: v1.0.0
 */
public class MultiSheetUtils {

    /**
     * 功能描述：根据接收的Excel文件来导入多个sheet,根据索引可返回一个集合
     * @param filePath 导入的文件路径
     * @param sheetIndex 导入的sheet索引
     * @param titleRows sheet表标题行数
     * @param headerRow sheet表头行数
     * @param pojoClass Excel实体类
     * @return 多个sheet接收的结果
     * @param <T> 泛型标识
     */
    public static <T> List<T> importMultiSheet(String filePath,int sheetIndex,Integer titleRows,Integer headerRow,Class<T> pojoClass){
        // 1.根据file得到Workbook,主要是要根据这个对象获取,传过来的excel有几个sheet页
        ImportParams importParams = new ImportParams();
        // 2.第几个sheet
        importParams.setStartSheetIndex(sheetIndex);
        importParams.setTitleRows(titleRows);
        importParams.setHeadRows(headerRow);

        // 3.是否保存本次上传的excel
        importParams.setNeedSave(true);

        // 4.表示表头必须包含的字段,不包含 就报错.
        importParams.setImportFields(new String[]{"用户ID"});

        List<T> list = null;
        try {
            list= ExcelImportUtil.importExcel(new FileInputStream(filePath),pojoClass,importParams);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return list;
    }

    /**
     * 导出多个sheet的方法
     */
    public static void exportMultiSheet(Object... objects) throws IOException {
        // 1.创建参数对象,用于设定Excel的sheet页内容等信息
        ExportParams params = new ExportParams();
        // 2.设置sheet的名称
        params.setSheetName("登录用户");
        // 3.设置sheet表的标题名称
        params.setTitle("登录用户列表");

        // 4.使用Map创建sheet1
        Map<String,Object> sheet1Map = new HashMap<>(3);
        // 5.设置title
        sheet1Map.put("title",params);
        // 6.设置导出的实体类型
        sheet1Map.put("entity", LoginUser.class);
        // 7.sheet中要填充的数据
        sheet1Map.put("data",objects[0]);

        // 8.创建参数对象,用于设定Excel的sheet页内容等信息
        ExportParams loginUrlExportParams = new ExportParams();
        // 9.设置sheet的名称
        loginUrlExportParams.setSheetName("URL路径");
        // 10.设置sheet表的标题名称
        loginUrlExportParams.setTitle("URL路径");
        // 11.使用map创建sheet2
        Map<String,Object> sheet2Map = new HashMap<>(3);
        // 12.设置title
        sheet2Map.put("title",loginUrlExportParams);
        // 13.设置导出的实体类型
        sheet2Map.put("entity", LoginUrl.class);
        // 14.sheet表中要填充的数据
        sheet2Map.put("data",objects[1]);

        // 15.将sheet1和sheet2进行包装
        List<Map<String,Object>> sheetList = new ArrayList<>();
        sheetList.add(sheet1Map);
        sheetList.add(sheet2Map);

        // 16.执行导出的方法
        Workbook workbook = ExcelExportUtil.exportExcel(sheetList, ExcelType.HSSF);

        FileOutputStream fileOutputStream = new FileOutputStream("d:\\spring_log\\exportLogin.xls");

        workbook.write(fileOutputStream);
        fileOutputStream.close();
        workbook.close();
    }
}
